﻿/*
 * Copyright (C) 2013 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

using UnityEngine;
using System.Collections;

public class FireController : MonoBehaviour {
    public GameObject MissilePrefab;
    public GameObject MissileSpawnPos;
    public GameObject MissileAimObj;

    private const float FireCooloff = 1.0f;
    private float lastFire = 0.0f;
    private const float MissileSpeed = 1500.0f;
    private const float ElevationCorrection = 15.0f;

    private PlayerAimController aimController;

    void Start() {
        aimController = gameObject.GetComponent<PlayerAimController>();
    }

    public bool ReadyToFire() { return Time.time - lastFire > FireCooloff; }

    public bool FireMissile() {
        if (!ReadyToFire()) return false;
        lastFire = Time.time;

        Debug.Log ("Missile aim is at " + MissileAimObj.transform.position);

        GameObject missile = (GameObject)GameObject.Instantiate(MissilePrefab,
            MissileSpawnPos.transform.position, Quaternion.identity);

        MissileController mc = missile.GetComponent<MissileController>();

        mc.Velocity = Utils.VectorFromAziElev(aimController.Azimuth,
            aimController.Elevation + ElevationCorrection, MissileSpeed);
        mc.transform.LookAt(MissileSpawnPos.transform.position + mc.Velocity);
        return true;
    }
}
